仿QQ空间之打造个性化可拉伸头部控件
androidstarjack的博客地址:
http://blog.csdn.net/androidstarjack/article/details/57524045
最近有研究了QQ空间可拉伸头部控件的listView。如何去做呢?这里使用了自定义listView的方法。先看效果图吧:
究竟如何去做呢? 可以用的方法有:
1.继承 extends ViewGrop
2.RecycleView +Behavior+CoordinateLayout
3.ViewGroup 组合控件
4.ListView + headView
这次我们主要用原生的自定义listView去做。
1.extends 继承 ListView
2.监听过度监听,在缩放头部图片重写overScrollBy方法
重写onScrollChanged方法监听度放大时,执行缩小图片
重写onTouchEvent方法,执行触摸时释放事件的处理
这里重写了方法 这里源码是怎么说的呢?
大致意思我们都可以看得出来.大致意思是响应于该视图中的内部滚动而调用的(即视图滚动其自己的内容)比如:eltaY < 0的时候下拉过度 对图片进行放大。 小于0时,上拉过度。
日前google上搜索“android overscroll”,对此效果的介绍很多,但关于其具体使用方式和实现,则很少涉及,偶有提及,也经常答非所问或似是而非,反而误导了别人。于是我查阅了android相关源码,并做了一些测试,在此讲讲我的理解。
首先是overscroll功能本身。
在最顶层的View类提供了支持,可通过setOverScrollMode函数控制其出现条件。但其实View中并没有实现overscroll功能,
提供了一个辅助函数overScrollBy,该函数根据overScrollMode和内容是否需要滚动控制最大滚动范围。
最后将计算结果传给onOverScrolled实现具体的overscroll功能
但此函数在View类中是全空的 overscroll功能真正的实现分别在ScrollView、AbsListView、HorizontalScrollView和WebView中各有一份,代码基本一样。
以ScrollView为例,它在处理笔点移动消息时调用overScrollBy来滚动视图,然后重载了overScrollBy函数来实现具体功能,其位置计算通过OverScroller类实现。
OverScroller作为一个计算引擎,应该是一个独立的模块,具体滚动效果和范围都不可能通过它来设置,我觉得没有必要细看。但滚动位置最终是它给出的,那相关数据肯定要传递给它。
回头看overScrollBy函数,它有两个控制overScroll出界范围的参数,几个实现里面都是取自ViewConfiguration.getScaledOverscrollDistance,而这个参数的值在我的源码中都是0,而且我没找到任何可以影响其结果的设置。
Activity中的代码:
xml布局
adapter适配器
adapter适配器请参考: 教你打造一个万能的适配器 item:布局
项目源码地址:http://blog.csdn.net/androidstarjack/article/details/57524045
如果你觉得此文对您有所帮助,欢迎入群 QQ交流群 :232203809 微信公众号:终端研发部
(欢迎关注学习和交流)